package com.wang.web3.contracts;

import org.web3j.abi.EventEncoder;
import org.web3j.abi.EventValues;
import org.web3j.abi.TypeReference;
import org.web3j.abi.datatypes.Address;
import org.web3j.abi.datatypes.Bool;
import org.web3j.abi.datatypes.DynamicArray;
import org.web3j.abi.datatypes.Event;
import org.web3j.abi.datatypes.Function;
import org.web3j.abi.datatypes.Type;
import org.web3j.abi.datatypes.Utf8String;
import org.web3j.abi.datatypes.generated.Uint16;
import org.web3j.abi.datatypes.generated.Uint256;
import org.web3j.abi.datatypes.generated.Uint32;
import org.web3j.abi.datatypes.generated.Uint64;
import org.web3j.crypto.Credentials;
import org.web3j.protocol.Web3j;
import org.web3j.protocol.core.DefaultBlockParameter;
import org.web3j.protocol.core.RemoteCall;
import org.web3j.protocol.core.methods.request.EthFilter;
import org.web3j.protocol.core.methods.response.Log;
import org.web3j.protocol.core.methods.response.TransactionReceipt;
import org.web3j.tuples.generated.Tuple11;
import org.web3j.tuples.generated.Tuple9;
import org.web3j.tx.Contract;
import org.web3j.tx.TransactionManager;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.Callable;

import rx.Observable;
import rx.functions.Func1;

/**
 * <p>Auto generated code.
 * <p><strong>Do not modify!</strong>
 * <p>Please use the <a href="https://docs.web3j.io/command_line.html">web3j command line tools</a>,
 * or the org.web3j.codegen.SolidityFunctionWrapperGenerator in the 
 * <a href="https://github.com/web3j/web3j/tree/master/codegen">codegen module</a> to update.
 *
 * <p>Generated with web3j version 3.2.0.
 */
public class KittyCore extends Contract {
    private static final String BINARY = "0x60606040526000600260146101000a81548160ff0219169083151502179055506101c060405190810160405280603c63ffffffff1663ffffffff168152602001607863ffffffff1663ffffffff16815260200161012c63ffffffff1663ffffffff16815260200161025863ffffffff1663ffffffff16815260200161070863ffffffff1663ffffffff168152602001610e1063ffffffff1663ffffffff168152602001611c2063ffffffff1663ffffffff16815260200161384063ffffffff1663ffffffff16815260200161708063ffffffff1663ffffffff16815260200161e10063ffffffff1663ffffffff1681526020016201518063ffffffff1663ffffffff1681526020016202a30063ffffffff1663ffffffff1681526020016205460063ffffffff1663ffffffff16815260200162093a8063ffffffff1663ffffffff16815250600390600e6200015692919062000803565b506040805190810160405280600d81526020017f43727970746f4b69747469657300000000000000000000000000000000000000815250600a9080519060200190620001a4929190620008ad565b506040805190810160405280600281526020017f434b000000000000000000000000000000000000000000000000000000000000815250600b9080519060200190620001f2929190620008ad565b5066038d7ea4c68000600c5561138860105561c350601155662386f26fc100006012556201518060135534156200022857600080fd5b6001600260146101000a81548160ff021916908315150217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200030a60008060007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000620003116401000000000262004a04176401000000009004565b5062000b2a565b60006200031d62000934565b600063ffffffff88111515156200033357600080fd5b63ffffffff87111515156200034757600080fd5b61ffff86111515156200035957600080fd5b610120604051908101604052808681526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018963ffffffff1681526020018863ffffffff168152602001600063ffffffff168152602001600061ffff1681526020018761ffff168152602001600161ffff168152509150600160058054806001018281620003ea9190620009b3565b916000526020600020906003020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff1602179055506101008201518160020160006101000a81548161ffff021916908361ffff160217905550505003905063ffffffff81111515156200056057600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad582846060015163ffffffff16856080015163ffffffff1686600001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a262000600600085836200060e6401000000000262004297176401000000009004565b809250505095945050505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515620007a357600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b82600e6007016008900481019282156200089a5791602002820160005b838211156200086657835183826101000a81548163ffffffff021916908363ffffffff160217905550926020019260040160208160030104928301926001030262000820565b8015620008985782816101000a81549063ffffffff021916905560040160208160030104928301926001030262000866565b505b509050620008a99190620009e8565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008f057805160ff191683800117855562000921565b8280016001018555821562000921579182015b828111156200092057825182559160200191906001019062000903565b5b50905062000930919062000a1e565b5090565b6101206040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b815481835581811511620009e357600302816003028360005260206000209182019101620009e2919062000a46565b5b505050565b62000a1b91905b8082111562000a1757600081816101000a81549063ffffffff021916905550600101620009ef565b5090565b90565b62000a4391905b8082111562000a3f57600081600090555060010162000a25565b5090565b90565b62000b2791905b8082111562000b23576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff02191690556002820160006101000a81549061ffff02191690555060030162000a4d565b5090565b90565b6152b08062000b3a6000396000f3006060604052600436106102d5576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063030c47411461038b5780630519ce79146103cd57806305e455461461042257806306fdde031461044b578063095ea7b3146104d95780630a0f81681461051b5780631051db3414610570578063133da6071461059d57806314001f4c1461060057806318160ddd1461063957806321717ebf1461066257806323b872dd146106b757806324e7a38a1461071857806327d7874c146107515780632ba73c151461078a57806338de7f76146107c35780633d7d3f5a146107e65780633f4ba83a14610824578063404d0e3e1461083957806346116e6f1461086257806346d22c70146108c55780634707f44f14610909578063481af3d31461095f5780634ad8c938146109c25780634b85fd5514610a005780634dfff04f14610a235780634e0a337914610a655780635612913414610a9e5780635c975abb14610ae05780635fd8c71014610b0d5780636352211e14610b225780636af04a5714610b855780636f57d2e914610bda5780636fbde40d14610c0f5780637004fb8414610c4857806370a0823114610c745780637158798814610cc15780638456cb5914610cfa5780638462151c14610d0f57806388c2a0bf14610d9d5780638cc51eda14610dd457806391876e5714610ea757806395d89b4114610ebc5780639d6fac6f14610f4a578063a25905a914610f8d578063a45f4bfc14610fb6578063a9059cbb14611019578063ae4d0ff71461105b578063b047fb5014611084578063b0c35c05146110d9578063b531933514611102578063c3bea9af1461112b578063c98cdbfe1461114e578063d3e6f49f146111a4578063e6cbe351146111df578063e98b7f4d14611234578063eb845c17146112b9578063ed60ade6146112e2578063f1ca941014611303578063f2b47d521461132c578063f7d8c88314611381575b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061037e5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561038957600080fd5b005b341561039657600080fd5b6103cb600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113a2565b005b34156103d857600080fd5b6103e061143e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561042d57600080fd5b610435611464565b6040518082815260200191505060405180910390f35b341561045657600080fd5b61045e61146a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561049e578082015181840152602081019050610483565b50505050905090810190601f1680156104cb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156104e457600080fd5b610519600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611508565b005b341561052657600080fd5b61052e6115a2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561057b57600080fd5b6105836115c7565b604051808215151515815260200191505060405180910390f35b34156105a857600080fd5b6105fe6004808035906020019091908035906020019082018035906020019080806020026020016040519081016040528093929190818152602001838360200280828437820191505050505050919050506115d0565b005b341561060b57600080fd5b610637600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611865565b005b341561064457600080fd5b61064c61198f565b6040518082815260200191505060405180910390f35b341561066d57600080fd5b61067561199f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156106c257600080fd5b610716600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506119c5565b005b341561072357600080fd5b61074f600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611a1b565b005b341561075c57600080fd5b610788600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611b45565b005b341561079557600080fd5b6107c1600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611c1f565b005b34156107ce57600080fd5b6107e46004808035906020019091905050611cfa565b005b34156107f157600080fd5b6108226004808035906020019091908035906020019091908035906020019091908035906020019091905050611d07565b005b341561082f57600080fd5b610837611e56565b005b341561084457600080fd5b61084c611fef565b6040518082815260200191505060405180910390f35b341561086d57600080fd5b6108836004808035906020019091905050611ff5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156108d057600080fd5b6108ef6004808035906020019091908035906020019091905050612028565b604051808215151515815260200191505060405180910390f35b341561091457600080fd5b610949600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919080359060200190919050506120b0565b6040518082815260200191505060405180910390f35b341561096a57600080fd5b6109806004808035906020019091905050612167565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156109cd57600080fd5b6109fe600480803590602001909190803590602001909190803590602001909190803590602001909190505061219a565b005b3415610a0b57600080fd5b610a2160048080359060200190919050506122fd565b005b3415610a2e57600080fd5b610a63600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050612363565b005b3415610a7057600080fd5b610a9c600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506123ea565b005b3415610aa957600080fd5b610ade600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506124c5565b005b3415610aeb57600080fd5b610af36125d8565b604051808215151515815260200191505060405180910390f35b3415610b1857600080fd5b610b206125eb565b005b3415610b2d57600080fd5b610b4360048080359060200190919050506126c2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610b9057600080fd5b610b9861273b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3415610be557600080fd5b610c0d6004808035906020019091908035906020019091908035906020019091905050612761565b005b3415610c1a57600080fd5b610c46600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612966565b005b3415610c5357600080fd5b610c726004808035906020019091908035906020019091905050612a90565b005b3415610c7f57600080fd5b610cab600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612e00565b6040518082815260200191505060405180910390f35b3415610ccc57600080fd5b610cf8600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050612e49565b005b3415610d0557600080fd5b610d0d612f66565b005b3415610d1a57600080fd5b610d46600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506130aa565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d89578082015181840152602081019050610d6e565b505050509050019250505060405180910390f35b3415610da857600080fd5b610dbe60048080359060200190919050506131e1565b6040518082815260200191505060405180910390f35b3415610ddf57600080fd5b610df5600480803590602001909190505061359b565b604051808a81526020018967ffffffffffffffff1667ffffffffffffffff1681526020018867ffffffffffffffff1667ffffffffffffffff1681526020018763ffffffff1663ffffffff1681526020018663ffffffff1663ffffffff1681526020018563ffffffff1663ffffffff1681526020018461ffff1661ffff1681526020018361ffff1661ffff1681526020018261ffff1661ffff168152602001995050505050505050505060405180910390f35b3415610eb257600080fd5b610eba61367a565b005b3415610ec757600080fd5b610ecf613802565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610f0f578082015181840152602081019050610ef4565b50505050905090810190601f168015610f3c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3415610f5557600080fd5b610f6b60048080359060200190919050506138a0565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3415610f9857600080fd5b610fa06138cf565b6040518082815260200191505060405180910390f35b3415610fc157600080fd5b610fd760048080359060200190919050506138dc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561102457600080fd5b611059600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061390f565b005b341561106657600080fd5b61106e61398b565b6040518082815260200191505060405180910390f35b341561108f57600080fd5b611097613991565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156110e457600080fd5b6110ec6139b7565b6040518082815260200191505060405180910390f35b341561110d57600080fd5b6111156139bd565b6040518082815260200191505060405180910390f35b341561113657600080fd5b61114c60048080359060200190919050506139c3565b005b341561115957600080fd5b61118e600480803590602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050613b7c565b6040518082815260200191505060405180910390f35b34156111af57600080fd5b6111c56004808035906020019091905050613b9a565b604051808215151515815260200191505060405180910390f35b34156111ea57600080fd5b6111f2613d29565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561123f57600080fd5b6112556004808035906020019091905050613d4f565b604051808c1515151581526020018b1515151581526020018a81526020018981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019b50505050505050505050505060405180910390f35b34156112c457600080fd5b6112cc613ecc565b6040518082815260200191505060405180910390f35b6113016004808035906020019091908035906020019091905050613ed2565b005b341561130e57600080fd5b611316614141565b6040518082815260200191505060405180910390f35b341561133757600080fd5b61133f614147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6113a0600480803590602001909190803590602001909190505061416d565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156113fe57600080fd5b600260149054906101000a900460ff1615151561141a57600080fd5b611424308361422b565b151561142f57600080fd5b61143a308284614297565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115005780601f106114d557610100808354040283529160200191611500565b820191906000526020600020905b8154815290600101906020018083116114e357829003601f168201915b505050505081565b600260149054906101000a900460ff1615151561152457600080fd5b61152e338261422b565b151561153957600080fd5b611543818361448b565b808273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006001905090565b6000806000806000803373ffffffffffffffffffffffffffffffffffffffff16600660008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561164657600080fd5b60009550600a945060058881548110151561165d57fe5b90600052602060002090600302019350600092505b86518310156117ea573373ffffffffffffffffffffffffffffffffffffffff166006600089868151811015156116a457fe5b90602001906020020151815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156117dd576005878481518110151561170957fe5b9060200190602002015181548110151561171f57fe5b906000526020600020906003020160020160009054906101000a900461ffff1661ffff168460020160009054906101000a900461ffff1661ffff16141561176a5784860195506117dc565b846005888581518110151561177b57fe5b9060200190602002015181548110151561179157fe5b906000526020600020906003020160020160009054906101000a900461ffff168560020160009054906101000a900461ffff160361ffff16860386028115156117d657fe5b04860195505b5b8280600101935050611672565b6001600a60014303406001900481151561180057fe5b06019150600a8681151561181057fe5b04600a03905061181f876144e1565b8082111561185b5760018460020160008282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b5050505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118c257600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166376190f8f6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b151561192857600080fd5b5af1151561193557600080fd5b50505060405180519050151561194a57600080fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600160058054905003905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff161515156119e157600080fd5b6119eb338261459c565b15156119f657600080fd5b611a00838261422b565b1515611a0b57600080fd5b611a16838383614297565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a7857600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166354c15b826040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515611ade57600080fd5b5af11515611aeb57600080fd5b505050604051805190501515611b0057600080fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611ba057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611bdc57600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611c7a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611cb657600080fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611d0381614608565b5050565b600260149054906101000a900460ff16151515611d2357600080fd5b611d2d338561422b565b1515611d3857600080fd5b611d6484600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661448b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515611e4057600080fd5b5af11515611e4d57600080fd5b50505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611eb157600080fd5b600260149054906101000a900460ff161515611ecc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611f2a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515611f8857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515611fe557600080fd5b611fed614649565b565b60115481565b60096020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000808511151561203b57600080fd5b60008411151561204a57600080fd5b60058581548110151561205957fe5b9060005260206000209060030201915060058481548110151561207857fe5b90600052602060002090600302019050612094828683876146dc565b80156120a657506120a584866148f1565b5b9250505092915050565b6000806000809150600190505b6120c561198f565b8111151561215a578473ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561214d57838214156121445780925061215f565b81806001019250505b80806001019150506120bd565b600080fd5b505092915050565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff161515156121b657600080fd5b6121c0338561422b565b15156121cb57600080fd5b6121d484613b9a565b15156121df57600080fd5b61220b84600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661448b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a85858585336040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b15156122e757600080fd5b5af115156122f457600080fd5b50505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561235957600080fd5b80600c8190555050565b600260149054906101000a900460ff1615151561237f57600080fd5b612389338261422b565b151561239457600080fd5b816009600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561244557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561248157600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561252157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561257c57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b60105460145410151561258e57600080fd5b6011546015541015156125a057600080fd5b6014600081548092919060010191905055506015600081548092919060010191905055506125d360008060008585614a04565b505050565b600260149054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561264757600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f1935050505015156126c057600080fd5b565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561273657600080fd5b919050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000803373ffffffffffffffffffffffffffffffffffffffff166006600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156127d157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561283e57600080fd5b60058581548110151561284d57fe5b906000526020600020906003020191504267ffffffffffffffff168260010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1610151561289757600080fd5b6005848154811015156128a657fe5b906000526020600020906003020190504267ffffffffffffffff168160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff161015156128f057600080fd5b6201518042018260010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506201518042018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555061295e858560008633614a04565b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156129c357600080fd5b8190508073ffffffffffffffffffffffffffffffffffffffff166385b861886040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515612a2957600080fd5b5af11515612a3657600080fd5b505050604051805190501515612a4b57600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600080600260149054906101000a900460ff16151515612aaf57600080fd5b612ab9338561422b565b1515612ac457600080fd5b612ace83856148f1565b1515612ad957600080fd5b600584815481101515612ae857fe5b90600052602060002090600302019150612c4e826101206040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681526020016002820160009054906101000a900461ffff1661ffff1661ffff1681525050614ce3565b1515612c5957600080fd5b600583815481101515612c6857fe5b90600052602060002090600302019050612dce816101206040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681526020016002820160009054906101000a900461ffff1661ffff1661ffff1681525050614ce3565b1515612dd957600080fd5b612de5828583866146dc565b1515612df057600080fd5b612dfa8484614d13565b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515612ea457600080fd5b600260149054906101000a900460ff161515612ebf57600080fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f450db8da6efbe9c22f2347f7c2021231df1fc58d3ae9a2fa75d39fa44619930581604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061300e57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b806130665750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b151561307157600080fd5b600260149054906101000a900460ff1615151561308d57600080fd5b6001600260146101000a81548160ff021916908315150217905550565b6130b26150de565b60006130bc6150de565b60008060006130ca87612e00565b945060008514156130fc5760006040518059106130e45750595b908082528060200260200182016040525095506131d7565b8460405180591061310a5750595b9080825280602002602001820160405250935061312561198f565b925060009150600190505b82811115156131d3578673ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156131c6578084838151811015156131af57fe5b906020019060200201818152505081806001019250505b8080600101915050613130565b8395505b5050505050919050565b600080600080600080600080600260149054906101000a900460ff1615151561320957600080fd5b60058981548110151561321857fe5b9060005260206000209060030201965060008760010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415151561325a57600080fd5b6133b0876101206040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681526020016002820160009054906101000a900461ffff1661ffff1661ffff1681525050614ea1565b15156133bb57600080fd5b8660010160189054906101000a900463ffffffff1663ffffffff1695506005868154811015156133e757fe5b9060005260206000209060030201945086600101601e9054906101000a900461ffff16935086600101601e9054906101000a900461ffff1661ffff1685600101601e9054906101000a900461ffff1661ffff1611156134565784600101601e9054906101000a900461ffff1693505b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638d8b1b88886000015487600001546040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050602060405180830381600087803b15156134f657600080fd5b5af1151561350357600080fd5b505050604051805190509250600660008a815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169150613573898860010160189054906101000a900463ffffffff1663ffffffff166001870161ffff168686614a04565b90508660010160186101000a81549063ffffffff021916905580975050505050505050919050565b6005818154811015156135aa57fe5b90600052602060002090600302016000915090508060000154908060010160009054906101000a900467ffffffffffffffff16908060010160089054906101000a900467ffffffffffffffff16908060010160109054906101000a900463ffffffff16908060010160149054906101000a900463ffffffff16908060010160189054906101000a900463ffffffff169080600101601c9054906101000a900461ffff169080600101601e9054906101000a900461ffff16908060020160009054906101000a900461ffff16905089565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156136d657600080fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b151561375b57600080fd5b5af1151561376857600080fd5b505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635fd8c7106040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401600060405180830381600087803b15156137f057600080fd5b5af115156137fd57600080fd5b505050565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156138985780601f1061386d57610100808354040283529160200191613898565b820191906000526020600020905b81548152906001019060200180831161387b57829003601f168201915b505050505081565b600381600e811015156138af57fe5b60089182820401919006600402915054906101000a900463ffffffff1681565b6000600580549050905090565b60066020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260149054906101000a900460ff1615151561392b57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561396757600080fd5b613971338261422b565b151561397c57600080fd5b613987338383614297565b5050565b60125481565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b60105481565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515613a2157600080fd5b601154601554101515613a3357600080fd5b613a4260008060008530614a04565b9050613a7081600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661448b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166327ebe40a82613ab7614ed2565b6000601354306040518663ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050600060405180830381600087803b1515613b5657600080fd5b5af11515613b6357600080fd5b5050506015600081548092919060010191905055505050565b600080613b8e60008060008787614a04565b90508091505092915050565b600080600083111515613bac57600080fd5b600583815481101515613bbb57fe5b90600052602060002090600302019050613d21816101206040519081016040529081600082015481526020016001820160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff1681526020016001820160109054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160149054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016001820160189054906101000a900463ffffffff1663ffffffff1663ffffffff16815260200160018201601c9054906101000a900461ffff1661ffff1661ffff16815260200160018201601e9054906101000a900461ffff1661ffff1661ffff1681526020016002820160009054906101000a900461ffff1661ffff1661ffff1681525050614ce3565b915050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008060008060008060008060008060058d815481101515613d7057fe5b9060005260206000209060030201905060008160010160189054906101000a900463ffffffff1663ffffffff1614159b50428160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1611159a5080600101601c9054906101000a900461ffff1661ffff1699508060010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1698508060010160189054906101000a900463ffffffff1663ffffffff1697508060010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1696508060010160109054906101000a900463ffffffff1663ffffffff1695508060010160149054906101000a900463ffffffff1663ffffffff16945080600101601e9054906101000a900461ffff1661ffff169350806000015492508060020160009054906101000a900461ffff1661ffff1691505091939597999b90929496989a50565b60135481565b600080600080600260149054906101000a900460ff16151515613ef457600080fd5b613efe338661422b565b1515613f0957600080fd5b613f1285613b9a565b1515613f1d57600080fd5b613f278587614fbc565b1515613f3257600080fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c55d0f56876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1515613fc257600080fd5b5af11515613fcf57600080fd5b50505060405180519050935034925060009150600c54840183101515613ffb57600c5483039250600191505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663454a2ab384886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506000604051808303818588803b151561408b57600080fd5b5af1151561409857600080fd5b505050506140b28563ffffffff168763ffffffff16614d13565b8115614139576005858154811015156140c757fe5b906000526020600020906003020190507f1c2771fbe007c332593b3adcacf033ce4a97f9cb1f6dd81e40d9a42c66d2e65c858260010160089054906101000a900467ffffffffffffffff16604051808381526020018267ffffffffffffffff1681526020019250505060405180910390a15b505050505050565b60155481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260149054906101000a900460ff1615151561418b57600080fd5b600c54341015151561419c57600080fd5b6141a68383612a90565b6005838154811015156141b557fe5b906000526020600020906003020190507f1c2771fbe007c332593b3adcacf033ce4a97f9cb1f6dd81e40d9a42c66d2e65c838260010160089054906101000a900467ffffffffffffffff16604051808381526020018267ffffffffffffffff1681526020019250505060405180910390a1505050565b60008273ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001019190505550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151561442b57600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906001900391905055506009600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556008600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b806008600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008090505b815181101561454a5760066000838381518110151561450257fe5b90602001906020020151815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905580806001019150506144e7565b8151600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505050565b60008273ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614905092915050565b60006006600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905560019050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156146a457600080fd5b600260149054906101000a900460ff1615156146bf57600080fd5b6000600260146101000a81548160ff021916908315150217905550565b6000818414156146ef57600090506148e9565b818560010160109054906101000a900463ffffffff1663ffffffff1614806147305750818560010160149054906101000a900463ffffffff1663ffffffff16145b1561473e57600090506148e9565b838360010160109054906101000a900463ffffffff1663ffffffff16148061477f5750838360010160149054906101000a900463ffffffff1663ffffffff16145b1561478d57600090506148e9565b60008360010160109054906101000a900463ffffffff1663ffffffff1614806147d0575060008560010160109054906101000a900463ffffffff1663ffffffff16145b156147de57600190506148e9565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff16148061485357508460010160149054906101000a900463ffffffff1663ffffffff168360010160109054906101000a900463ffffffff1663ffffffff16145b1561486157600090506148e9565b8460010160109054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff1614806148d657508460010160149054906101000a900463ffffffff1663ffffffff168360010160149054906101000a900463ffffffff1663ffffffff16145b156148e457600090506148e9565b600190505b949350505050565b60008060006006600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806149fa57508173ffffffffffffffffffffffffffffffffffffffff166009600087815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9250505092915050565b6000614a0e6150f2565b600063ffffffff8811151515614a2357600080fd5b63ffffffff8711151515614a3657600080fd5b61ffff8611151515614a4757600080fd5b610120604051908101604052808681526020014267ffffffffffffffff168152602001600067ffffffffffffffff1681526020018963ffffffff1681526020018863ffffffff168152602001600063ffffffff168152602001600061ffff1681526020018761ffff168152602001600161ffff168152509150600160058054806001018281614ad69190615171565b916000526020600020906003020160008590919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060a08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060c082015181600101601c6101000a81548161ffff021916908361ffff16021790555060e082015181600101601e6101000a81548161ffff021916908361ffff1602179055506101008201518160020160006101000a81548161ffff021916908361ffff160217905550505003905063ffffffff8111151515614c4b57600080fd5b8373ffffffffffffffffffffffffffffffffffffffff167f0a5311bd2a6608f08a180df2ee7c5946819a649b204b554bb8e39825b2c50ad582846060015163ffffffff16856080015163ffffffff1686600001516040518085815260200184815260200183815260200182815260200194505050505060405180910390a2614cd560008583614297565b809250505095945050505050565b6000808260a0015163ffffffff16148015614d0c575042826040015167ffffffffffffffff1611155b9050919050565b600080600583815481101515614d2557fe5b90600052602060002090600302019150600584815481101515614d4457fe5b90600052602060002090600302019050828160010160186101000a81548163ffffffff021916908363ffffffff160217905550614d8082615015565b614d8981615015565b6009600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556009600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690557f6b4808987a5cecdf67d54ca5dc20664fafca80ef7195097800c12549245ab20d6006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168585604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a150505050565b6000808260a0015163ffffffff1614158015614ecb575042826040015167ffffffffffffffff1611155b9050919050565b6000806000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663eac9d94c6040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b1515614f5c57600080fd5b5af11515614f6957600080fd5b5050506040518051905091506fffffffffffffffffffffffffffffffff82101515614f9357600080fd5b600282811515614f9f57fe5b0482019050601254811015614fb45760125490505b809250505090565b6000806000600585815481101515614fd057fe5b90600052602060002090600302019150600584815481101515614fef57fe5b9060005260206000209060030201905061500b828683876146dc565b9250505092915050565b600381600101601c9054906101000a900461ffff1661ffff16600e8110151561503a57fe5b600891828204019190066004029054906101000a900463ffffffff1663ffffffff1642018160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600d81600101601c9054906101000a900461ffff1661ffff1610156150db57600181600101601c8282829054906101000a900461ffff160192506101000a81548161ffff021916908361ffff1602179055505b50565b602060405190810160405280600081525090565b6101206040519081016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600061ffff168152602001600061ffff168152602001600061ffff1681525090565b81548183558181151161519e5760030281600302836000526020600020918201910161519d91906151a3565b5b505050565b61528191905b8082111561527d576000808201600090556001820160006101000a81549067ffffffffffffffff02191690556001820160086101000a81549067ffffffffffffffff02191690556001820160106101000a81549063ffffffff02191690556001820160146101000a81549063ffffffff02191690556001820160186101000a81549063ffffffff021916905560018201601c6101000a81549061ffff021916905560018201601e6101000a81549061ffff02191690556002820160006101000a81549061ffff0219169055506003016151a9565b5090565b905600a165627a7a72305820291d2e0cc18d233b47d0fc2cdff80f9eb2a27e3b19d4e2f3681e0fa1079307e60029";

    protected static final HashMap<String, String> _addresses;

    static {
        _addresses = new HashMap<>();
        _addresses.put("5777", "0xf25186b5081ff5ce73482ad761db0eb0d25abfbf");
    }

    protected KittyCore(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    protected KittyCore(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        super(BINARY, contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    public List<PregnantEventResponse> getPregnantEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Pregnant", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<PregnantEventResponse> responses = new ArrayList<PregnantEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            PregnantEventResponse typedResponse = new PregnantEventResponse();
            typedResponse.owner = (String) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.sireId = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<PregnantEventResponse> pregnantEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Pregnant", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, PregnantEventResponse>() {
            @Override
            public PregnantEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                PregnantEventResponse typedResponse = new PregnantEventResponse();
                typedResponse.owner = (String) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.sireId = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
                return typedResponse;
            }
        });
    }

    public List<AutoBirthEventResponse> getAutoBirthEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("AutoBirth", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<AutoBirthEventResponse> responses = new ArrayList<AutoBirthEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            AutoBirthEventResponse typedResponse = new AutoBirthEventResponse();
            typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<AutoBirthEventResponse> autoBirthEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("AutoBirth", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, AutoBirthEventResponse>() {
            @Override
            public AutoBirthEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                AutoBirthEventResponse typedResponse = new AutoBirthEventResponse();
                typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.cooldownEndTime = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                return typedResponse;
            }
        });
    }

    public List<TransferEventResponse> getTransferEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Transfer", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}),
                Arrays.<TypeReference<?>>asList());
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<TransferEventResponse> responses = new ArrayList<TransferEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            TransferEventResponse typedResponse = new TransferEventResponse();
            typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.to = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.tokenId = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<TransferEventResponse> transferEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Transfer", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}),
                Arrays.<TypeReference<?>>asList());
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, TransferEventResponse>() {
            @Override
            public TransferEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                TransferEventResponse typedResponse = new TransferEventResponse();
                typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse.to = (String) eventValues.getIndexedValues().get(1).getValue();
                typedResponse.tokenId = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
                return typedResponse;
            }
        });
    }

    public List<ApprovalEventResponse> getApprovalEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Approval", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}),
                Arrays.<TypeReference<?>>asList());
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<ApprovalEventResponse> responses = new ArrayList<ApprovalEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            ApprovalEventResponse typedResponse = new ApprovalEventResponse();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.approved = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.tokenId = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<ApprovalEventResponse> approvalEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Approval", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}, new TypeReference<Address>() {}, new TypeReference<Uint256>() {}),
                Arrays.<TypeReference<?>>asList());
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, ApprovalEventResponse>() {
            @Override
            public ApprovalEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                ApprovalEventResponse typedResponse = new ApprovalEventResponse();
                typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse.approved = (String) eventValues.getIndexedValues().get(1).getValue();
                typedResponse.tokenId = (BigInteger) eventValues.getIndexedValues().get(2).getValue();
                return typedResponse;
            }
        });
    }

    public List<BirthEventResponse> getBirthEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("Birth", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<BirthEventResponse> responses = new ArrayList<BirthEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            BirthEventResponse typedResponse = new BirthEventResponse();
            typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.kittyId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
            typedResponse.sireId = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
            typedResponse.genes = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<BirthEventResponse> birthEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("Birth", 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, BirthEventResponse>() {
            @Override
            public BirthEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                BirthEventResponse typedResponse = new BirthEventResponse();
                typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue();
                typedResponse.kittyId = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
                typedResponse.matronId = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
                typedResponse.sireId = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
                typedResponse.genes = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
                return typedResponse;
            }
        });
    }

    public List<ContractUpgradeEventResponse> getContractUpgradeEvents(TransactionReceipt transactionReceipt) {
        final Event event = new Event("ContractUpgrade", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<EventValues> valueList = extractEventParameters(event, transactionReceipt);
        ArrayList<ContractUpgradeEventResponse> responses = new ArrayList<ContractUpgradeEventResponse>(valueList.size());
        for (EventValues eventValues : valueList) {
            ContractUpgradeEventResponse typedResponse = new ContractUpgradeEventResponse();
            typedResponse.newContract = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public Observable<ContractUpgradeEventResponse> contractUpgradeEventObservable(DefaultBlockParameter startBlock, DefaultBlockParameter endBlock) {
        final Event event = new Event("ContractUpgrade", 
                Arrays.<TypeReference<?>>asList(),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        EthFilter filter = new EthFilter(startBlock, endBlock, getContractAddress());
        filter.addSingleTopic(EventEncoder.encode(event));
        return web3j.ethLogObservable(filter).map(new Func1<Log, ContractUpgradeEventResponse>() {
            @Override
            public ContractUpgradeEventResponse call(Log log) {
                EventValues eventValues = extractEventParameters(event, log);
                ContractUpgradeEventResponse typedResponse = new ContractUpgradeEventResponse();
                typedResponse.newContract = (String) eventValues.getNonIndexedValues().get(0).getValue();
                return typedResponse;
            }
        });
    }

    public RemoteCall<TransactionReceipt> rescueLostKitty(BigInteger _kittyId, String _recipient) {
        Function function = new Function(
                "rescueLostKitty", 
                Arrays.<Type>asList(new Uint256(_kittyId),
                new Address(_recipient)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> cfoAddress() {
        Function function = new Function("cfoAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> promoCreatedCount() {
        Function function = new Function("promoCreatedCount", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> name() {
        Function function = new Function("name", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> approve(String _to, BigInteger _tokenId) {
        Function function = new Function(
                "approve", 
                Arrays.<Type>asList(new Address(_to),
                new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> ceoAddress() {
        Function function = new Function("ceoAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<Boolean> implementsERC721() {
        Function function = new Function("implementsERC721", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<TransactionReceipt> doEnchant(BigInteger _target, List<BigInteger> _kittyIds) {
        Function function = new Function(
                "doEnchant", 
                Arrays.<Type>asList(new Uint256(_target),
                new DynamicArray<Uint256>(
                        org.web3j.abi.Utils.typeMap(_kittyIds, Uint256.class))),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setSiringAuctionAddress(String _address) {
        Function function = new Function(
                "setSiringAuctionAddress", 
                Arrays.<Type>asList(new Address(_address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> totalSupply() {
        Function function = new Function("totalSupply", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> siringAuction() {
        Function function = new Function("siringAuction", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> transferFrom(String _from, String _to, BigInteger _tokenId) {
        Function function = new Function(
                "transferFrom", 
                Arrays.<Type>asList(new Address(_from),
                new Address(_to),
                new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setGeneScienceAddress(String _address) {
        Function function = new Function(
                "setGeneScienceAddress", 
                Arrays.<Type>asList(new Address(_address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setCEO(String _newCEO) {
        Function function = new Function(
                "setCEO", 
                Arrays.<Type>asList(new Address(_newCEO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setCOO(String _newCOO) {
        Function function = new Function(
                "setCOO", 
                Arrays.<Type>asList(new Address(_newCOO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> sendKeyByResolveKitty(BigInteger _kittyId) {
        Function function = new Function(
                "sendKeyByResolveKitty", 
                Arrays.<Type>asList(new Uint256(_kittyId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> createSaleAuction(BigInteger _kittyId, BigInteger _startingPrice, BigInteger _endingPrice, BigInteger _duration) {
        Function function = new Function(
                "createSaleAuction", 
                Arrays.<Type>asList(new Uint256(_kittyId),
                new Uint256(_startingPrice),
                new Uint256(_endingPrice),
                new Uint256(_duration)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> gen0CreationLimit() {
        Function function = new Function("gen0CreationLimit", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> sireAllowedToAddress(BigInteger param0) {
        Function function = new Function("sireAllowedToAddress", 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<Boolean> canBreedWith(BigInteger _matronId, BigInteger _sireId) {
        Function function = new Function("canBreedWith", 
                Arrays.<Type>asList(new Uint256(_matronId),
                new Uint256(_sireId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<BigInteger> tokensOfOwnerByIndex(String _owner, BigInteger _index) {
        Function function = new Function("tokensOfOwnerByIndex", 
                Arrays.<Type>asList(new Address(_owner),
                new Uint256(_index)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> kittyIndexToApproved(BigInteger param0) {
        Function function = new Function("kittyIndexToApproved", 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> createSiringAuction(BigInteger _kittyId, BigInteger _startingPrice, BigInteger _endingPrice, BigInteger _duration) {
        Function function = new Function(
                "createSiringAuction", 
                Arrays.<Type>asList(new Uint256(_kittyId),
                new Uint256(_startingPrice),
                new Uint256(_endingPrice),
                new Uint256(_duration)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setAutoBirthFee(BigInteger val) {
        Function function = new Function(
                "setAutoBirthFee", 
                Arrays.<Type>asList(new Uint256(val)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> approveSiring(String _addr, BigInteger _sireId) {
        Function function = new Function(
                "approveSiring", 
                Arrays.<Type>asList(new Address(_addr),
                new Uint256(_sireId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setCFO(String _newCFO) {
        Function function = new Function(
                "setCFO", 
                Arrays.<Type>asList(new Address(_newCFO)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> createPromoKitty(BigInteger _genes, String _owner) {
        Function function = new Function(
                "createPromoKitty", 
                Arrays.<Type>asList(new Uint256(_genes),
                new Address(_owner)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Boolean> paused() {
        Function function = new Function("paused", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<TransactionReceipt> withdrawBalance() {
        Function function = new Function(
                "withdrawBalance", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> ownerOf(BigInteger _tokenId) {
        Function function = new Function("ownerOf", 
                Arrays.<Type>asList(new Uint256(_tokenId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<String> newContractAddress() {
        Function function = new Function("newContractAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> summonGirl(BigInteger _leftGirlId, BigInteger _rightGirlId, BigInteger _genes) {
        Function function = new Function(
                "summonGirl", 
                Arrays.<Type>asList(new Uint256(_leftGirlId),
                new Uint256(_rightGirlId),
                new Uint256(_genes)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> setSaleAuctionAddress(String _address) {
        Function function = new Function(
                "setSaleAuctionAddress", 
                Arrays.<Type>asList(new Address(_address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> breedWith(BigInteger _matronId, BigInteger _sireId) {
        Function function = new Function(
                "breedWith", 
                Arrays.<Type>asList(new Uint256(_matronId),
                new Uint256(_sireId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> balanceOf(String _owner) {
        Function function = new Function("balanceOf", 
                Arrays.<Type>asList(new Address(_owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> pause() {
        Function function = new Function(
                "pause", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> giveBirth(BigInteger _matronId) {
        Function function = new Function(
                "giveBirth", 
                Arrays.<Type>asList(new Uint256(_matronId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Tuple9<BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>> kitties(BigInteger param0) {
        final Function function = new Function("kitties", 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint32>() {}, new TypeReference<Uint32>() {}, new TypeReference<Uint32>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint16>() {}, new TypeReference<Uint16>() {}));
        return new RemoteCall<Tuple9<BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>>(
                new Callable<Tuple9<BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>>() {
                    @Override
                    public Tuple9<BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);;
                        return new Tuple9<BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>(
                                (BigInteger) results.get(0).getValue(), 
                                (BigInteger) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue(), 
                                (BigInteger) results.get(5).getValue(), 
                                (BigInteger) results.get(6).getValue(), 
                                (BigInteger) results.get(7).getValue(), 
                                (BigInteger) results.get(8).getValue());
                    }
                });
    }

    public RemoteCall<TransactionReceipt> withdrawAuctionBalances() {
        Function function = new Function(
                "withdrawAuctionBalances", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<String> symbol() {
        Function function = new Function("symbol", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> cooldowns(BigInteger param0) {
        Function function = new Function("cooldowns", 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint32>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<BigInteger> getKittiesCount() {
        Function function = new Function("getKittiesCount", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> kittyIndexToOwner(BigInteger param0) {
        Function function = new Function("kittyIndexToOwner", 
                Arrays.<Type>asList(new Uint256(param0)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> transfer(String _to, BigInteger _tokenId) {
        Function function = new Function(
                "transfer", 
                Arrays.<Type>asList(new Address(_to),
                new Uint256(_tokenId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<BigInteger> gen0StartingPrice() {
        Function function = new Function("gen0StartingPrice", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> cooAddress() {
        Function function = new Function("cooAddress", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> autoBirthFee() {
        Function function = new Function("autoBirthFee", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<BigInteger> promoCreationLimit() {
        Function function = new Function("promoCreationLimit", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> createGen0Auction(BigInteger _genes) {
        Function function = new Function(
                "createGen0Auction", 
                Arrays.<Type>asList(new Uint256(_genes)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<TransactionReceipt> createKittyByEther(BigInteger _genes, String _address) {
        Function function = new Function(
                "createKittyByEther", 
                Arrays.<Type>asList(new Uint256(_genes),
                new Address(_address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Boolean> isReadyToBreed(BigInteger _kittyId) {
        Function function = new Function("isReadyToBreed", 
                Arrays.<Type>asList(new Uint256(_kittyId)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeRemoteCallSingleValueReturn(function, Boolean.class);
    }

    public RemoteCall<String> saleAuction() {
        Function function = new Function("saleAuction", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<BigInteger> gen0AuctionDuration() {
        Function function = new Function("gen0AuctionDuration", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<TransactionReceipt> bidOnSiringAuction(BigInteger _sireId, BigInteger _matronId, BigInteger weiValue) {
        Function function = new Function(
                "bidOnSiringAuction", 
                Arrays.<Type>asList(new Uint256(_sireId),
                new Uint256(_matronId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public RemoteCall<BigInteger> gen0CreatedCount() {
        Function function = new Function("gen0CreatedCount", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeRemoteCallSingleValueReturn(function, BigInteger.class);
    }

    public RemoteCall<String> geneScience() {
        Function function = new Function("geneScience", 
                Arrays.<Type>asList(), 
                Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeRemoteCallSingleValueReturn(function, String.class);
    }

    public RemoteCall<TransactionReceipt> breedWithAuto(BigInteger _matronId, BigInteger _sireId, BigInteger weiValue) {
        Function function = new Function(
                "breedWithAuto", 
                Arrays.<Type>asList(new Uint256(_matronId),
                new Uint256(_sireId)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function, weiValue);
    }

    public static RemoteCall<KittyCore> deploy(Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(KittyCore.class, web3j, credentials, gasPrice, gasLimit, BINARY, "");
    }

    public static RemoteCall<KittyCore> deploy(Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return deployRemoteCall(KittyCore.class, web3j, transactionManager, gasPrice, gasLimit, BINARY, "");
    }

    public RemoteCall<TransactionReceipt> setNewAddress(String _v2Address) {
        Function function = new Function(
                "setNewAddress", 
                Arrays.<Type>asList(new Address(_v2Address)),
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<Tuple11<Boolean, Boolean, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>> getKitty(BigInteger _id) {
        final Function function = new Function("getKitty", 
                Arrays.<Type>asList(new Uint256(_id)),
                Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}, new TypeReference<Bool>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}, new TypeReference<Uint256>() {}));
        return new RemoteCall<Tuple11<Boolean, Boolean, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>>(
                new Callable<Tuple11<Boolean, Boolean, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>>() {
                    @Override
                    public Tuple11<Boolean, Boolean, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger> call() throws Exception {
                        List<Type> results = executeCallMultipleValueReturn(function);;
                        return new Tuple11<Boolean, Boolean, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger, BigInteger>(
                                (Boolean) results.get(0).getValue(), 
                                (Boolean) results.get(1).getValue(), 
                                (BigInteger) results.get(2).getValue(), 
                                (BigInteger) results.get(3).getValue(), 
                                (BigInteger) results.get(4).getValue(), 
                                (BigInteger) results.get(5).getValue(), 
                                (BigInteger) results.get(6).getValue(), 
                                (BigInteger) results.get(7).getValue(), 
                                (BigInteger) results.get(8).getValue(), 
                                (BigInteger) results.get(9).getValue(), 
                                (BigInteger) results.get(10).getValue());
                    }
                });
    }

    public RemoteCall<TransactionReceipt> unpause() {
        Function function = new Function(
                "unpause", 
                Arrays.<Type>asList(), 
                Collections.<TypeReference<?>>emptyList());
        return executeRemoteCallTransaction(function);
    }

    public RemoteCall<List> tokensOfOwner(String _owner) {
        Function function = new Function("tokensOfOwner", 
                Arrays.<Type>asList(new Address(_owner)),
                Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>() {}));
        return executeRemoteCallSingleValueReturn(function, List.class);
    }

    public static KittyCore load(String contractAddress, Web3j web3j, Credentials credentials, BigInteger gasPrice, BigInteger gasLimit) {
        return new KittyCore(contractAddress, web3j, credentials, gasPrice, gasLimit);
    }

    public static KittyCore load(String contractAddress, Web3j web3j, TransactionManager transactionManager, BigInteger gasPrice, BigInteger gasLimit) {
        return new KittyCore(contractAddress, web3j, transactionManager, gasPrice, gasLimit);
    }

    protected String getStaticDeployedAddress(String networkId) {
        return _addresses.get(networkId);
    }

    public static String getPreviouslyDeployedAddress(String networkId) {
        return _addresses.get(networkId);
    }

    public static class PregnantEventResponse {
        public String owner;

        public BigInteger matronId;

        public BigInteger sireId;
    }

    public static class AutoBirthEventResponse {
        public BigInteger matronId;

        public BigInteger cooldownEndTime;
    }

    public static class TransferEventResponse {
        public String from;

        public String to;

        public BigInteger tokenId;
    }

    public static class ApprovalEventResponse {
        public String owner;

        public String approved;

        public BigInteger tokenId;
    }

    public static class BirthEventResponse {
        public String owner;

        public BigInteger kittyId;

        public BigInteger matronId;

        public BigInteger sireId;

        public BigInteger genes;
    }

    public static class ContractUpgradeEventResponse {
        public String newContract;
    }
}
